#ifndef __CORE_SINGLETON_H__
#define __CORE_SINGLETON_H__

#include "singletonmanager.h"

#include <boost/shared_ptr.hpp>

namespace raytracer {

template<typename Dependencie>
class DependOn
{
protected:
   DependOn();
   ~DependOn();
};

template<typename Derived>
class Singleton : public SingletonBase
{
public:

   static Derived& instance();
   virtual ~Singleton();

protected:
   Singleton();
   virtual void break_bridge();

   static boost::shared_ptr<Derived> __singleton_bridge;
};

} //end of namespace

#include "singleton.hxx"

#endif //__CORE_SINGLETON_H__
